"use client"

import {
   Check,
   ChevronRight,
   ChevronsUpDown,
   GalleryVerticalEnd,
   Search,
} from "lucide-react"
import * as React from "react"

import {
   Breadcrumb,
   BreadcrumbItem,
   BreadcrumbLink,
   BreadcrumbList,
   BreadcrumbPage,
   BreadcrumbSeparator,
} from "~/registry/miami/ui/breadcrumb"
import {
   Collapsible,
   CollapsibleContent,
   CollapsibleTrigger,
} from "~/registry/miami/ui/collapsible"
import {
   DropdownMenu,
   DropdownMenuContent,
   DropdownMenuItem,
   DropdownMenuTrigger,
} from "~/registry/miami/ui/dropdown-menu"
import { Label } from "~/registry/miami/ui/label"
import { Separator } from "~/registry/miami/ui/separator"
import {
   Sidebar,
   SidebarContent,
   SidebarGroup,
   SidebarGroupContent,
   SidebarGroupLabel,
   SidebarHeader,
   SidebarInput,
   SidebarInset,
   SidebarMenu,
   SidebarMenuButton,
   SidebarMenuItem,
   SidebarProvider,
   SidebarRail,
   SidebarTrigger,
} from "~/registry/miami/ui/sidebar"

export const iframeHeight = "800px"

export const description = "A sidebar with collapsible sections."

// This is sample data.
const data = {
   versions: ["1.0.1", "1.1.0-alpha", "2.0.0-beta1"],
   navMain: [
      {
         title: "Getting Started",
         url: "#",
         items: [
            {
               title: "Installation",
               url: "#",
            },
            {
               title: "Project Structure",
               url: "#",
            },
         ],
      },
      {
         title: "Building Your Application",
         url: "#",
         items: [
            {
               title: "Routing",
               url: "#",
            },
            {
               title: "Data Fetching",
               url: "#",
               isActive: true,
            },
            {
               title: "Rendering",
               url: "#",
            },
            {
               title: "Caching",
               url: "#",
            },
            {
               title: "Styling",
               url: "#",
            },
            {
               title: "Optimizing",
               url: "#",
            },
            {
               title: "Configuring",
               url: "#",
            },
            {
               title: "Testing",
               url: "#",
            },
            {
               title: "Authentication",
               url: "#",
            },
            {
               title: "Deploying",
               url: "#",
            },
            {
               title: "Upgrading",
               url: "#",
            },
            {
               title: "Examples",
               url: "#",
            },
         ],
      },
      {
         title: "API Reference",
         url: "#",
         items: [
            {
               title: "Components",
               url: "#",
            },
            {
               title: "File Conventions",
               url: "#",
            },
            {
               title: "Functions",
               url: "#",
            },
            {
               title: "next.config.js Options",
               url: "#",
            },
            {
               title: "CLI",
               url: "#",
            },
            {
               title: "Edge Runtime",
               url: "#",
            },
         ],
      },
      {
         title: "Architecture",
         url: "#",
         items: [
            {
               title: "Accessibility",
               url: "#",
            },
            {
               title: "Fast Refresh",
               url: "#",
            },
            {
               title: "Next.js Compiler",
               url: "#",
            },
            {
               title: "Supported Browsers",
               url: "#",
            },
            {
               title: "Turbopack",
               url: "#",
            },
         ],
      },
      {
         title: "Community",
         url: "#",
         items: [
            {
               title: "Contribution Guide",
               url: "#",
            },
         ],
      },
   ],
}

export default function Component() {
   const [selectedVersion, setSelectedVersion] = React.useState(
      data.versions[0],
   )

   return (
      <SidebarProvider>
         <Sidebar>
            <SidebarHeader>
               <SidebarMenu>
                  <SidebarMenuItem>
                     <DropdownMenu>
                        <DropdownMenuTrigger asChild>
                           <SidebarMenuButton
                              size="lg"
                              className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
                           >
                              <div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground">
                                 <GalleryVerticalEnd className="size-4" />
                              </div>
                              <div className="flex flex-col gap-0.5 leading-none">
                                 <span className="font-semibold">
                                    Documentation
                                 </span>
                                 <span className="">v{selectedVersion}</span>
                              </div>
                              <ChevronsUpDown className="ml-auto" />
                           </SidebarMenuButton>
                        </DropdownMenuTrigger>
                        <DropdownMenuContent
                           className="w-[--radix-dropdown-menu-trigger-width]"
                           align="start"
                        >
                           {data.versions.map((version) => (
                              <DropdownMenuItem
                                 key={version}
                                 onSelect={() => setSelectedVersion(version)}
                              >
                                 v{version}{" "}
                                 {version === selectedVersion && (
                                    <Check className="ml-auto" />
                                 )}
                              </DropdownMenuItem>
                           ))}
                        </DropdownMenuContent>
                     </DropdownMenu>
                  </SidebarMenuItem>
               </SidebarMenu>
               <form>
                  <SidebarGroup className="py-0">
                     <SidebarGroupContent className="relative">
                        <Label htmlFor="search" className="sr-only">
                           Search
                        </Label>
                        <SidebarInput
                           id="search"
                           placeholder="Search the docs..."
                           className="pl-8"
                        />
                        <Search className="pointer-events-none absolute left-2 top-1/2 size-4 -translate-y-1/2 select-none opacity-50" />
                     </SidebarGroupContent>
                  </SidebarGroup>
               </form>
            </SidebarHeader>
            <SidebarContent className="gap-0">
               {/* We create a collapsible SidebarGroup for each parent. */}
               {data.navMain.map((item) => (
                  <Collapsible
                     key={item.title}
                     title={item.title}
                     defaultOpen
                     className="group/collapsible"
                  >
                     <SidebarGroup>
                        <SidebarGroupLabel
                           asChild
                           className="group/label text-sm text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground"
                        >
                           <CollapsibleTrigger>
                              {item.title}{" "}
                              <ChevronRight className="ml-auto transition-transform group-data-[state=open]/collapsible:rotate-90" />
                           </CollapsibleTrigger>
                        </SidebarGroupLabel>
                        <CollapsibleContent>
                           <SidebarGroupContent>
                              <SidebarMenu>
                                 {item.items.map((item) => (
                                    <SidebarMenuItem key={item.title}>
                                       <SidebarMenuButton
                                          asChild
                                          isActive={item.isActive}
                                       >
                                          <a href={item.url}>{item.title}</a>
                                       </SidebarMenuButton>
                                    </SidebarMenuItem>
                                 ))}
                              </SidebarMenu>
                           </SidebarGroupContent>
                        </CollapsibleContent>
                     </SidebarGroup>
                  </Collapsible>
               ))}
            </SidebarContent>
            <SidebarRail />
         </Sidebar>
         <SidebarInset>
            <header className="flex sticky top-0 bg-background h-16 shrink-0 items-center gap-2 border-b px-4">
               <SidebarTrigger className="-ml-1" />
               <Separator orientation="vertical" className="mr-2 h-4" />
               <Breadcrumb>
                  <BreadcrumbList>
                     <BreadcrumbItem className="hidden md:block">
                        <BreadcrumbLink href="#">
                           Building Your Application
                        </BreadcrumbLink>
                     </BreadcrumbItem>
                     <BreadcrumbSeparator className="hidden md:block" />
                     <BreadcrumbItem>
                        <BreadcrumbPage>Data Fetching</BreadcrumbPage>
                     </BreadcrumbItem>
                  </BreadcrumbList>
               </Breadcrumb>
            </header>
            <div className="flex flex-1 flex-col gap-4 p-4">
               {Array.from({ length: 24 }).map((_, index) => (
                  <div
                     key={index}
                     className="aspect-video h-12 w-full rounded-lg bg-muted/50"
                  />
               ))}
            </div>
         </SidebarInset>
      </SidebarProvider>
   )
}
